package thinkinjava1.ch14;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * Created by BobbyGu on 2017/2/28.
 */
class CBox extends Canvas implements Runnable {
    private Thread t;
    private int pause;
    private static final Color[] colors = {
            Color.black, Color.blue, Color.cyan,
            Color.darkGray, Color.gray, Color.green,
            Color.lightGray, Color.magenta,
            Color.orange, Color.pink, Color.red,
            Color.white, Color.yellow
    };
    private Color cColor = newColor();

    private static final Color newColor() {
        return colors[(int) (Math.random() * colors.length)];
    }

    public void paint(Graphics g) {
        g.setColor(cColor);
        Dimension s = getSize();
        g.fillRect(0, 0, s.width, s.height);
    }

    public CBox(int pause) {
        this.pause = pause;
        t = new Thread(this);
        t.start();
    }

    public void run() {
        while (true) {
            cColor = newColor();
            repaint();
            try {
                t.sleep(pause);
            } catch (InterruptedException e) {
            }
        }
    }
}

public class ColorBoxes extends Frame {
    public ColorBoxes(int pause, int grid) {
        setTitle("ColorBoxes");
        setLayout(new GridLayout(grid, grid));
        for (int i = 0; i < grid * grid; i++)
            add(new CBox(pause));
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        int pause = 500;
        int grid = 8;
        if (args.length > 0)
            pause = Integer.parseInt(args[0]);
        if (args.length > 1)
            grid = Integer.parseInt(args[1]);
        Frame f = new ColorBoxes(pause, grid);
        f.setSize(500, 400);
        f.setVisible(true);
    }
}
